#include "StdAfx.hpp"

#include "V.hpp"

#include <stdio.h>

//////////////////////////////////////////////////////////////////////////

int Add(int x, int y) {
    return x + y;
}

int Sub(int x, int y) {
    return x - y;
}

//////////////////////////////////////////////////////////////////////////

void K::KKK(const KK &kk) const {
    printf("virtual void K::KKK(const KK &kk = K2) const -- %d\n", kk);
}

void K2::KKK(const KK &kk) const {
    printf("virtual void K2::KKK(const KK &kk = K2) const -- %d\n", kk);
}

void K3::KKK(const KK &kk) const {
    printf("virtual void K3::KKK(const KK &kk = K2) const -- %d\n", kk);
}

//////////////////////////////////////////////////////////////////////////

void Dummy::Register() {
    printf("void Dummy::Register() -- %d\n", E1);
}

//////////////////////////////////////////////////////////////////////////

namespace {

    struct MyStruct    {
        int u, v, w;
    };

}

void Test() {
    Dummy();
    MyStruct ms;
    ms.u = 123;
}

int Why(T_int ti) {
    return ti.m;
}

//////////////////////////////////////////////////////////////////////////

PrivateCDtors PrivateCDtors::ms_pcd;

PrivateCDtors &PrivateCDtors::GetInstance() {
    printf("PrivateCDtors &PrivateCDtors::GetInstance()\n");
    return ms_pcd;
}

template class A<int>;

//////////////////////////////////////////////////////////////////////////

void CXXHeld::foo() const {
    printf("void CXXHeld::foo() const\n");
}

ObjHolder::~ObjHolder() {
    delete obj;
    obj = nullptr;
}

void ObjHolder::foo() const {
    obj->foo();
}
